package com.example.data0306.base;

//public abstract class BaseFragment extends Fragment {
//
//    private final String TAG = "Fragment-" + this.getClass().getSimpleName();
//
//
//    public static <T extends Fragment> T newInstance(Class<T> cls, Bundle bundle) {
//        T fragment = null;
//        try {
//            fragment = cls.newInstance();
//            fragment.setArguments(bundle);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return fragment;
//    }
//
//    @Override
//    public void onCreate(@Nullable Bundle savedInstanceState) {
//        super.onCreate(savedInstanceState);
//        Bundle argument = getArguments();
//        initArgumentData(argument == null ? new Bundle() : argument);
//        if (savedInstanceState != null) {
//            initSaveState(savedInstanceState);
//        }
//    }
//
//    /**
//     * 初始化 arguments 数据
//     * 如果设置了argument那么会调用该方法
//     *
//     * @param arguments 传入的参数对象
//     */
//    protected void initArgumentData(Bundle arguments) {
//
//    }
//
//    /**
//     * 恢复保存状态
//     *
//     * @param savedInstanceState 缓存数据
//     */
//    protected void initSaveState(Bundle savedInstanceState) {
//
//    }
//
//    @Nullable
//    @Override
//    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//
//        View view = inflater.inflate(rootLayout(), container, false);
//        view.setOnClickListener(v -> {
//            //这个on点击事件监听是为了防止fragment叠加导致的事件传递到底下那层fragment中
//        });
//
//        view.setOnKeyListener((v, keyCode, event) -> event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK && onBackPressed());
//        initView(view);
//        initData();
//        bindData();
//        bindEvent();
//        operation();
//
//        return view;
//    }
//
//    /**
//     * 内容View的id（R.layout.xxx）
//     *
//     * @return 资源id
//     */
//    protected abstract int rootLayout();
//
//    /**
//     * 当fragment在前面的时候点击回退按钮的时候调用该方法
//     *
//     * @return true 表示拦截 ，false 表示不拦截
//     */
//    public boolean onBackPressed() {
//        return false;
//    }
//
//    /**
//     * 初始化View
//     *
//     * @param view 背景view
//     */
//    protected abstract void initView(View view);
//
//    /**
//     * 初始化数据
//     */
//    protected abstract void initData();
//
//    /**
//     * 绑定数据
//     */
//    protected void bindData() {
//
//    }
//
//    /**
//     * 绑定事件
//     */
//    protected abstract void bindEvent();
//
//    /**
//     * 完成后要执行的事
//     */
//    protected void operation() {
//
//    }
//}

import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

public abstract class BaseFragment extends Fragment {

    public static <T extends Fragment> T newInstance(Class<T> cls, Bundle bundle) {
        T fragment = null;
        try {
            fragment = cls.newInstance();
            fragment.setArguments(bundle);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return fragment;
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Bundle argument = getArguments();
        initArgumentData(argument == null ? new Bundle() : argument);
        if (savedInstanceState != null) {
            initSaveState(savedInstanceState);
        }
    }

    //用于初始化数据
    protected void initArgumentData(Bundle arguments) {

    }

    //用于缓存数据
    protected void initSaveState(Bundle savedInstanceState) {

    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(rootLayout(), container, false);
        view.setOnClickListener(v -> {
            //这个on点击事件监听是为了防止fragment叠加导致的事件传递到底下那层fragment中
        });

        view.setOnKeyListener((v, keyCode, event) -> event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK && onBackPressed());
        initView(view);
        initData();
        bindData();
        bindEvent();
        operation();

        return view;
    }



    protected abstract int rootLayout();//寻找界面
    //示例protected int rootLayout() {
    //        return R.layout.fragment_home_news;
    //    }

    protected abstract int contentView();

    public boolean onBackPressed() {
        return false;
    }

    protected abstract void initView(View rootView);

    //初始化数据
    protected abstract void initData();

    protected void bindData(){

    };

    protected abstract void bindEvent();

    protected void operation(){

    }
}
